home *** CD-ROM | disk | FTP | other *** search
/ NeXT Enterprise Objects Framework 1.1 / NeXT Enterprise Objects Framework 1.1.iso / NextDeveloper / Examples / EnterpriseObjects / Archiving / ArchivingObject / Owner.m < prev    next >
Encoding:
Text File  |  1994-12-31  |  3.3 KB  |  150 lines

  1. /* Owner.m
  2.  *
  3.  * You may freely copy, distribute, and reuse the code in this example.
  4.  * NeXT disclaims any warranty of any kind, expressed or  implied, as to its
  5.  * fitness for any particular use.
  6.  *
  7.  * 
  8.  *
  9.  * Written by: Mai Nguyen, NeXT Developer Support
  10.  */
  11.  
  12.  
  13. #import <eointerface/eointerface.h>
  14. #import "Owner.h"
  15. #import "Author.h"
  16.  
  17. #define ARCHIVE_FILE    "ObjectArchive"
  18.  
  19. @implementation Owner
  20.  
  21.  
  22. - appDidInit:sender
  23. {
  24.     EOAdaptorChannel    *adaptorChannel;
  25.     
  26.        /* set up the adaptor channel for debugging */
  27.     adaptorChannel = [[dataSource databaseChannel] adaptorChannel]; 
  28.     [(EOAdaptorChannel *)adaptorChannel setDelegate: self];
  29.     return self;
  30. }
  31.  
  32.     
  33. - (void)adaptorChannel:channel didEvaluateExpression:(NSString *)expression
  34. {
  35.     NSLog (expression);
  36. }
  37.  
  38. /*     Archive the first object in the array of selected objects.
  39.  *  In this example, only one object is selected at a time.
  40.  */
  41. - writeObject:sender
  42. {
  43.     eoArray = [controller selectedObjects];
  44.     // Archive the first object in the array of selected objects.
  45.     //  In this example, only one object is selected at a time.
  46.     if ([eoArray count] == 0) {
  47.         NXRunAlertPanel(NULL, "No object to archive!", NULL, NULL, NULL);
  48.         return self;
  49.         }
  50.         
  51.     eoAuthor = [eoArray objectAtIndex:0];
  52.     [self archiveThisObject:eoAuthor]; 
  53.     
  54.     return self;
  55. }
  56.  
  57. - readObject:sender
  58. {
  59.     eoAuthor = (Author *)[self unarchiveObject];
  60.     return self;
  61. }
  62.  
  63.  
  64. - (BOOL) archiveThisObject:(Object *)object
  65. {
  66.     NXTypedStream *stream;
  67.     char    archivePath[MAXPATHLEN+1];
  68.     BOOL b = YES;
  69.     
  70.     if (!object)
  71.         return NO;
  72.         
  73.     NS_DURING
  74.     
  75.     sprintf(archivePath, "%s/%s", [[self applicationPath] cString], ARCHIVE_FILE);
  76.      stream = NXOpenTypedStreamForFile(archivePath, NX_WRITEONLY);
  77.     NXWriteRootObject(stream, object);
  78.     NXCloseTypedStream(stream);
  79.  
  80.     NS_HANDLER
  81.     
  82.     [textObject appendText:"Object archiving failed\n"];
  83.     b = NO;
  84.     
  85.     NS_ENDHANDLER
  86.     
  87.     if (b == YES)   
  88.            [textObject appendText:"Object archiving succeeded\n"];
  89.        
  90.     return b;
  91. }
  92.  
  93. -(Object *)unarchiveObject 
  94. {
  95.     NXTypedStream *stream;
  96.     Object *object;
  97.     char archivePath[MAXPATHLEN+1];
  98.     char buf[1024];
  99.         
  100.    
  101.     sprintf(archivePath, "%s/%s", [[self applicationPath] cString], ARCHIVE_FILE);
  102.     stream = NXOpenTypedStreamForFile(archivePath, NX_READONLY);
  103.     if (!stream) {
  104.         object = nil;
  105.     [textObject appendText:"Object unarchiving failed\n"];
  106.     return object;
  107.     }
  108.         
  109.     object = NXReadObject(stream);
  110.  
  111.     NXCloseTypedStream(stream);
  112.     [textObject appendText:"Object unarchiving succeeded\n"]; 
  113.     sprintf(buf, "%s\n",[[(Author *)object description] cString]);
  114.     [textObject appendText: "Author contents:"];
  115.     [textObject appendText:buf];
  116.              
  117.     return [object autorelease];
  118. }
  119.  
  120. - (NSString *)applicationPath 
  121. {
  122.     int           i;
  123.     NSString   *appPathName = nil;
  124.  
  125.     for (i = strlen(NXArgv[0]) - 1; (i >= 0) && (NXArgv[0][i] != '/'); i--);
  126.     appPathName = [NSString stringWithCString:NXArgv[0] length:i];
  127.     if (NXArgv[0][0] != '/') {
  128.         char path[MAXPATHLEN+1];
  129.         appPathName = [NSString stringWithFormat:@"%s/%@", getwd(path), appPathName];
  130.     }
  131.     return appPathName;
  132. }
  133.  
  134. @end
  135.  
  136.  
  137. @implementation Text(printResults)
  138.  
  139. - appendText:(const char *)newText
  140. {
  141.     int currentLength = [self textLength];
  142.  
  143.     [self setSel:currentLength :currentLength];
  144.     [self replaceSel:newText];
  145.     [self scrollSelToVisible];
  146.     return self;
  147. }
  148.  
  149. @end
  150.